\section{Preliminaries}

%%--------------------
%%Esto viene de la seccion 1

%El Debugging se define como la búsqueda, aislamiento y correción de defectos del software. 
The debugging activity is defined as the search, isolation and accuracy of defects of the software.
%Este proceso se puede separar en tres actividades \cite{zeller} reproducción del error, determinación de causas y aislamiento, y finalmente, la corrección.  
This process is divided in three activities \cite {zeller} reproduction of the error, determination of causes and isolation, and 
finally, the correction.
%Estudios empíricos han señalado que los errores detectados en las etapas finales del desarrollo de un sistema producen un costo de reparación 200 veces mayor que si éstos se hubisen detectados en las etapas inciales. 
Empirical studies show that the errors detected in the final stages of the development of a system produce a cost of repair 
200 times major than detected to the beginning of the project.
%El testing junto con el debugging proveen una excelente fuente de información, como lo son los reportes de errores, las métricas y los resultados que permiten al ingeniero de software la administración y gestión eficiente de los recursos involucrados.
The testing and debugging are an excellent information source. The reports of errors, the metrics
and the results allow to the software engineers a better administration and management of the involved resources.
%%--------------------
\\
%El concepto de ``Workaround" surge dentro del área de los sistemas ``Self-Healing". Este tipo de sistemas posee la capacidad de auto-recuperarse. Ante la detección de una falla el propio sistema, provee los mecanismos para su corrección.
The concept of ``Workaround'' is defined in the area of the ``Self-Healing'' systems. 
These systems possess the capacity of self-healing. The system provides the mechanisms for its detection and correction.
%Un workaround aprovecha la redundancia implícita en el propio sistema. Dado un estado inicial \textit{Ei}, un programa \textit{P} y un estado final \textit{Ef}, un workaround define una secuencia alternativa de acciones \textit{P1}, cuya semántica es equivalente a la del programa \textit{P}. 
A workaround makes use of the implicit redundancy in the proper system. Given the initial state \textit {Ei}, 
a program \textit{P} and 
the final state \textit{Ef}, a workaround define an alternative actions sequence \textit{P'}, whose semantic is
equivalent to \textit{P} program.
%Las especificacines algebr\'aicas proveen herramientas eficientes para modelar componentes de software,y a partir de los cuales derivar workarounds. Otras técnicas para detectar workarounds utilizan especificaciones basadas en estados finitos.
The algebraic specifications provide a efficient tool to model software components and to derive workarounds. Other techniques use specifications based on the finite states. 
%Se aplican diferentes algoritmos para la búsqueda de caminos desde un estado inicial a un estado final, generando así trazas de ejecución equivalentes.
Different algorithms are applied to search paths from the initial state to the final state, generating thus,  equivalent execution traces.
%En los trabajos \cite{wa,wa1} se presenta una arquitectura de monitoreo y recuperación de fallas utilizando Workarounds en tiempo de ejecución, lo que los autores de\-no\-mi\-nan ´´automatic workarounds". 
In \cite{wa, wa1} it present an architecture of monitoring and flaws recovery using workarounds in runtime.
%Como resultado de estos  trabajos, el gurpo ha desarrollado una herramienta denominada RAW(Runtime Automatic Workarounds) \cite{raw} sobre la cual se han realizado una serie de experimentos logrando detectar errores y workaround en sistemas tales com Google Maps y Flickr. 
As result of these works, they have developed a tool named RAW (Runtime Automatic Workarounds) \cite {raw}. 
These works also include a set of experiments over systems such com Google Maps and Flickr. 
%Este trabajo, como se explica en la secci\'on \ref{propuesta} utiliza al concepto de workarounds, de una forma diferente, lo hace como una técnica de debugging, es decir, se aplcia en tiempo de desarrollo. 
We propose to use the workarounds concept as a debugging technique. This mechanism uses the Alloy y DynAlloy \cite{alloy,dyn} tools.
We define a \textit{Permanent Workaround (PWa)} as the actions sequence that is independent to program context. 
A \textit{Candidate Workaround (CWa)} is a actions sequence that can be a \textit{PWa}. Let's see the following actions specifications: 

\begin{center}
\begin{tabular}{ccc}
 Action & Pre-Condition& Post-Contition \\ \hline
 $Inc\_one$  & $x=x_0$  &  $x=x_0+1$ \\
 $Dec\_one$  & $x=x_0$  &  $x=x_0-1$ \\
 $Dec\_two$  & $x=x_0$  &  $x=x_0-2$ \\
 $Reset$  & $x=x_0$  &  $x=0$ \\
\end{tabular}\end{center}

The actions $Inc\_one$ and $Dec\_one$ increases and decreases a integer number in one unit, respectively. The $Dec\_two$ action decreases a integer number in two units, 
and finaly, the $Reset$ action, reset the value number to zero. Let's view next, the $P$, $P'$ and $P''$ programs that use 
the previous actions. 


\begin{center}
\begin{tabular}{lcc}
 Program & Pre-condition& Post-Contition \\ \hline
 $P: Inc\_one; Inc\_one; Dec\_one; Dec\_one$  & $x=x_0$  &  $x=x_0$ \\
 $P': Inc\_one; Inc\_one; Inc\_one; Reset$ & $x=x_0$  &  $x=0$ \\
 $P'': Inc\_one; Inc\_one; Dec\_two$  & $x=x_0$  &  $x=x_0-2$ \\
 \end{tabular}\end{center}
The program \textit{$P'$} is a \textit{CWa} but not is a \textit{PWa }. \textit{$P'$} verified the \textit{$P$-contract} only when $x_0$ is equals to zero. On the other hand, the program \textit{$P''$} is a \textit{PWa} because for all value $x_0$, the \textit{$P$-contract} is verified.\\


%English version-
